#!/bin/bash

# 设置颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 默认参数
INTERVAL=5      # 默认收集频率为5秒
DURATION=60     # 默认收集时长为60秒
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
OUTPUT_DIR="./network_report_${TIMESTAMP}"  # 输出目录，只使用一层文件夹
INTERFACE=""    # 默认网卡，自动检测

# 帮助信息
show_help() {
    echo "用法: $0 [选项]"
    echo "选项:"
    echo "  -i, --interval <秒>   收集频率，每隔多少秒收集一次数据（默认: 5秒）"
    echo "  -d, --duration <秒>   收集时长，收集数据的总时间（默认: 60秒）"
    echo "  -e, --interface <名称> 指定网卡名称（默认: 自动检测默认网卡）"
    echo "  -o, --output-dir <目录>  输出目录（默认: ./network_report_时间戳）"
    echo "  -h, --help           显示此帮助信息"
    exit 0
}

# 解析命令行参数
while [[ $# -gt 0 ]]; do
    case $1 in
        -i|--interval)
            INTERVAL="$2"
            shift 2
            ;;
        -d|--duration)
            DURATION="$2"
            shift 2
            ;;
        -e|--interface)
            INTERFACE="$2"
            shift 2
            ;;
        -o|--output-dir)
            OUTPUT_DIR="$2"
            shift 2
            ;;
        -h|--help)
            show_help
            ;;
        *)
            echo -e "${RED}未知选项: $1${NC}"
            show_help
            ;;
    esac
done

# 获取默认网卡函数
get_default_interface() {
    local default_iface=""
    
    # 尝试方法1：通过默认路由获取
    if command -v ip &> /dev/null; then
        default_iface=$(ip route | grep default | awk '{print $5}' | head -n 1)
    fi
    
    # 尝试方法2：如果方法1失败，通过ifconfig查找活跃网卡
    if [ -z "$default_iface" ] && command -v ifconfig &> /dev/null; then
        default_iface=$(ifconfig | grep -E "^[a-zA-Z0-9]+" | grep -v "lo" | head -n 1 | cut -d ":" -f 1)
    fi
    
    # 如果还是失败，使用回退值
    if [ -z "$default_iface" ]; then
        default_iface="eth0"
    fi
    
    echo "$default_iface"
}

# 检查参数有效性
if ! [[ "$INTERVAL" =~ ^[0-9]+$ ]]; then
    echo -e "${RED}错误: 收集频率必须是正整数${NC}"
    exit 1
fi

if ! [[ "$DURATION" =~ ^[0-9]+$ ]]; then
    echo -e "${RED}错误: 收集时长必须是整数${NC}"
    exit 1
fi

# 如果未指定网卡，自动检测
if [ -z "$INTERFACE" ]; then
    INTERFACE=$(get_default_interface)
fi

# 确保脚本存在
if [ ! -f "subscripts/network_interface_analyzer.sh" ] || [ ! -f "subscripts/tcp_connection_analyzer.sh" ]; then
    echo -e "${RED}错误: 无法找到子脚本。请确保 network_interface_analyzer.sh 和 tcp_connection_analyzer.sh 位于subscripts目录中。${NC}"
    exit 1
fi

# 创建输出目录
mkdir -p "$OUTPUT_DIR"
if [ $? -ne 0 ]; then
    echo -e "${RED}错误: 无法创建输出目录: $OUTPUT_DIR${NC}"
    exit 1
fi

# 设置输出文件名
NETWORK_OUTPUT="${OUTPUT_DIR}/network_interface_analysis.txt"
TCP_OUTPUT="${OUTPUT_DIR}/tcp_connection_analysis.txt"

# 显示基本信息
echo -e "${BLUE}===== 网络性能监控 =====${NC}"
echo -e "${BLUE}收集频率: ${INTERVAL}秒${NC}"
echo -e "${BLUE}收集时长: ${DURATION}秒${NC}"
echo -e "${BLUE}监控网卡: ${INTERFACE}${NC}"
echo -e "${BLUE}输出目录: ${OUTPUT_DIR}${NC}"
echo -e "${BLUE}=======================${NC}\n"

# 运行函数 - 模仿storage_performance_monitor.sh的风格
function run_step() {
    local script="$1"
    local description="$2"
    local output="$3"
    local args="$4"
    local log_file="/tmp/network_monitor_${script}_log.txt"
    
    echo -e "${YELLOW}正在${description}...${NC}"
    
    # 确保脚本存在且有执行权限
    if [ ! -f "./subscripts/$script" ]; then
        echo -e "${RED}错误: $script 脚本不存在${NC}"
        return 1
    fi
    
    # 确保脚本有执行权限
    if [ ! -x "./subscripts/$script" ]; then
        echo -e "${YELLOW}提示: 为 $script 添加执行权限${NC}"
        chmod +x "./subscripts/$script"
    fi
    
    # 执行脚本，保存详细日志
    bash "./subscripts/$script" -i "$INTERVAL" -d "$DURATION" -o "$output" $args > "$log_file" 2>&1
    
    local exit_code=$?
    if [ $exit_code -eq 0 ]; then
        echo -e "${GREEN}✓ ${description}完成${NC}"
        return 0
    else
        echo -e "${RED}✗ ${description}失败 (退出代码: $exit_code)${NC}"
        echo -e "${YELLOW}错误详情 (来自 $log_file):${NC}"
        tail -10 "$log_file" | sed 's/^/    /'
        return $exit_code
    fi
}

# 构建接口参数
interface_args=""
if [ -n "$INTERFACE" ]; then
    interface_args="-e $INTERFACE"
fi

# 顺序执行各分析器脚本
run_step "network_interface_analyzer.sh" "收集网络接口数据" "$NETWORK_OUTPUT" "$interface_args"
network_result=$?

run_step "tcp_connection_analyzer.sh" "收集TCP连接数据" "$TCP_OUTPUT" "$interface_args"
tcp_result=$?

# 检查结果并显示摘要
echo -e "\n${BLUE}===== 执行结果摘要 =====${NC}"

if [ $network_result -eq 0 ] && [ -f "$NETWORK_OUTPUT" ]; then
    echo -e "${GREEN}✓ 网络接口分析报告: $(basename $NETWORK_OUTPUT)${NC}"
else
    echo -e "${RED}✗ 网络接口分析未能成功完成${NC}"
fi

if [ $tcp_result -eq 0 ] && [ -f "$TCP_OUTPUT" ]; then
    echo -e "${GREEN}✓ TCP连接分析报告: $(basename $TCP_OUTPUT)${NC}" 
else
    echo -e "${RED}✗ TCP连接分析未能成功完成${NC}"
fi

# 最终结果
echo -e "\n${GREEN}所有任务已完成！${NC}"
echo -e "${GREEN}报告文件已保存在目录: $OUTPUT_DIR${NC}" 

# 清理临时日志文件
rm -f /tmp/network_monitor_*_log.txt 2>/dev/null 
